import os

def split_csv(input_file, output_folder, max_chunk_size):
    # Crea la carpeta de salida si no existe
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    file_size = os.path.getsize(input_file)
    print(f"Tamaño total del archivo: {file_size / (1024 * 1024 * 1024):.2f} GB")
    
    # Contador para el progreso
    parts_generated = 0
    current_chunk_size = 0
    
    # Abre el archivo de entrada
    with open(input_file, 'r') as file:
        # Abre el primer archivo de salida
        output_file = os.path.join(output_folder, f"part_{parts_generated + 1}.csv")
        output_chunk = open(output_file, 'w')
        
        # Lee línea por línea del archivo de entrada
        for line in file:
            # Escribe la línea en el archivo de salida
            output_chunk.write(line)
            current_chunk_size += len(line.encode('utf-8'))
            
            # Si el tamaño actual del chunk excede el máximo especificado, cierra el archivo actual y abre uno nuevo
            if current_chunk_size >= max_chunk_size:
                output_chunk.close()
                parts_generated += 1
                print(f"Parte {parts_generated} creada: {output_file}")
                
                # Abre el siguiente archivo de salida
                output_file = os.path.join(output_folder, f"part_{parts_generated + 1}.csv")
                output_chunk = open(output_file, 'w')
                current_chunk_size = 0
        
        # Cierra el último archivo de salida
        output_chunk.close()
        parts_generated += 1
        print(f"Parte {parts_generated} creada: {output_file}")
        
    print("Proceso completado.")

# Nombre del archivo CSV grande
input_file = 'fullVinsRelations.csv'
# Carpeta de salida para las partes divididas
output_folder = '/home/juandavid/Dunas/database/chunkSize'
# Tamaño máximo del chunk en bytes (aproximadamente 2GB)
max_chunk_size = 2 * 1024 * 1024 * 1024  # 2GB

# Llama a la función para dividir el archivo
split_csv(input_file, output_folder, max_chunk_size)
